<?php
/**
 * Page gestion des profils
 * Permet l'affichage, l'ajout, la suppression et la modification d'un profil
 *
 * @category actions
 * @package administration
 *
 * @author M.CASTANHEIRO, M.MEUNIER, O.PATTE, C.PORTEMER, R.THERY-HERMAIN
 * @version 1.0
 */
class droitAction extends shAction {
    /**
     * Fonction appellée automatiquement pour toutes les requêtes de l'action
     */
    public function init() {
	$this->setTitle('Gestion des accès');
	$this->addAriane(shRequest::link('administration'), 'Administration');
	$this->addAriane(shRequest::link('administration','profil'), 'Gestion des profils d\'accès');
    }


    /**
     * Gère les Module/Action/Page nécessitant un accès spécial
     */
    public function execute() {
	$droits = shSGBD::select('SELECT droit.id, droit.module, droit.action, droit.request '.
				 'FROM droit '.
				 'ORDER BY droit.module, droit.action, droit.request ');
	$this->assign('droits', $droits);
    }

    /**
     * Permet d'ajouter un accès sur un Module/Action/Requête
     */
    public function executeCreate() {
	$this->setTitle('Ajout d\'un accès');
	$this->addAriane(shRequest::link('administration','droit'), 'Gestion des accès');

	$formulaire = new shFormulaire();
	$formulaire->setSubmitText('Ajouter un accès');

	shField::text('Module')
	    ->setHelper('Le module par défaut est '.shRequest::DEFAULT_MODULE)
	    ->appendTo($formulaire);

	shField::text('Action')
	    ->setHelper('L\'action par défaut est '.shRequest::DEFAULT_ACTION)
	    ->setRequired(false)
	    ->appendTo($formulaire);

	shField::text('Requête')
	    ->setHelper('Généralement default, create, delete ou edit')
	    ->setRequired(false)
	    ->appendTo($formulaire);

	$formulaire->setCheck(function($formulaire) {
	   // Si pas de module indiqué, proposer le module par défaut
	   if ( $formulaire->getField('Module')->getValue() == '' ) {
	       $formulaire->getField('Module')->setValue(shRequest::DEFAULT_MODULE);
	       $formulaire->getField('Module')->setError('Le module par défaut est '.shRequest::DEFAULT_MODULE);
	   }
	});

	$formulaire->setSubmit(function($formulaire) {
	   shSGBD::insert('INSERT INTO droit(module, action, request) '.
			  'VALUES(:module, :action, :request) ',
			  array(':module' => $formulaire->getField('Module')->getValue(),
				':action' => $formulaire->getField('Action')->getValue(),
				':request' => $formulaire->getField('Requête')->getValue()));
	   shAction::redirect('administration', 'droit');
	});

	$this->assign('formulaire', $formulaire);
    }

    /**
     * Permet de supprimer un accès 
     */
    public function executeDelete($id_droit) {
	$this->setTitle('Suppression d\'un accès');
	$this->addAriane(shRequest::link('administration','droit'), 'Gestion des accès');
	
	// Suppression des relations dans droit_profil
	shSGBD::delete('DELETE FROM droit_profil '.
			'WHERE id_droit=? ',
			array($id_droit));

	// Suppression du tuple dans droit
	shSGBD::delete('DELETE FROM droit '.
			'WHERE id=? ',
			array($id_droit));

	shAction::redirect('administration', 'droit');
    }
}
?>
